import { useCache, CACHE_KEY } from '@/hooks/web/useCache'
import { TokenType } from '@/api/login/types'
import { decrypt, encrypt } from '@/utils/jsencrypt'

const { wsCache } = useCache()

const AccessTokenKey = 'ACCESS_TOKEN'
const RefreshTokenKey = 'REFRESH_TOKEN'
const NiuShopTokenKey = 'NIOSHOP_TOKEN'
// 获取token
export const getAccessToken = () => {
  // 此处与TokenKey相同，此写法解决初始化时Cookies中不存在TokenKey报错
  return wsCache.get(AccessTokenKey) ? wsCache.get(AccessTokenKey) : wsCache.get('ACCESS_TOKEN')
}

// 刷新token
export const getRefreshToken = () => {
  return wsCache.get(RefreshTokenKey)
}
// 刷新token
export const getNiuShopToken = () => {
  return wsCache.get(NiuShopTokenKey)
}

// 设置token
export const setToken = (token: TokenType) => {
  wsCache.set(RefreshTokenKey, token.refreshToken)
  wsCache.set(AccessTokenKey, token.accessToken)
  wsCache.set(NiuShopTokenKey, token.token)
}

// 删除token
export const removeToken = () => {
  wsCache.delete(AccessTokenKey)
  wsCache.delete(RefreshTokenKey)
}

/** 格式化token（jwt格式） */
export const formatToken = (token: string): string => {
  return 'Bearer ' + token
}
// ========== 账号相关 ==========

export type LoginFormType = {
  tenantName: string
  username: string
  password: string
  rememberMe: boolean
}

export const getLoginForm = () => {
  const loginForm: LoginFormType = wsCache.get(CACHE_KEY.LoginForm)
  if (loginForm) {
    loginForm.password = decrypt(loginForm.password) as string
  }
  return loginForm
}

export const setLoginForm = (loginForm: LoginFormType) => {
  loginForm.password = encrypt(loginForm.password) as string
  wsCache.set(CACHE_KEY.LoginForm, loginForm, { exp: 30 * 24 * 60 * 60 })
}

export const removeLoginForm = () => {
  wsCache.delete(CACHE_KEY.LoginForm)
}

// ========== 租户相关 ==========

export const getTenantId = () => {
  return wsCache.get(CACHE_KEY.TenantId)
}

export const setTenantId = (tenantId: string) => {
  wsCache.set(CACHE_KEY.TenantId, tenantId)
}

export const getTenantType = () => {
  return wsCache.get(CACHE_KEY.TenantType)
}
export const getTenantTypeValue = () => {
  const tenantType = wsCache.get(CACHE_KEY.TenantType)
  const tenant = LoginTenantType.filter((ele) => {
    return ele.code == tenantType
  })[0]
  const tenantTypeValue = tenant.value
  return tenantTypeValue
}
export const setTenantType = (tenantType: string) => {
  wsCache.set(CACHE_KEY.TenantType, tenantType)
}

/** 根据租户类型初始化 登录租户选择信息 */
export const LoginTenantType = [
  {
    value: 0,
    label: '平台',
    code: 'platform-saas'
  },
  {
    value: 3,
    label: '公司',
    code: 'company-hq'
  },

  {
    value: 4,
    label: '门店',
    code: 'retail-store'
  },
  {
    value: 5,
    label: '商城',
    code: 'shopping-mall'
  }
]
